package com.datatrans.service;

import com.datatrans.config.TransferConfig;
import com.datatrans.exception.TransferException;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 数据库连接服务类
 */
public class DatabaseService {
    
    // 静态初始化块，用于加载数据库驱动
    static {
        try {
            // 加载MySQL驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            // 忽略异常，可能不使用MySQL
        }
        
        try {
            // 加载PostgreSQL驱动
            Class.forName("org.postgresql.Driver");
        } catch (ClassNotFoundException e) {
            // 忽略异常，可能不使用PostgreSQL
        }
        
        try {
            // 加载MSSQL驱动
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        } catch (ClassNotFoundException e) {
            // 忽略异常，可能不使用MSSQL
        }
        
        try {
            // 加载Oracle驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            // 忽略异常，可能不使用Oracle
        }
    }
    
    /**
     * 获取源数据库连接
     */
    public Connection getSourceConnection(TransferConfig config) throws TransferException {
        try {
            return DriverManager.getConnection(
                config.getSourceUrl(), 
                config.getSourceUsername(), 
                config.getSourcePassword()
            );
        } catch (SQLException e) {
            throw new TransferException("无法连接到源数据库: " + e.getMessage(), e);
        }
    }
    
    /**
     * 获取目标数据库连接
     */
    public Connection getTargetConnection(TransferConfig config) throws TransferException {
        try {
            return DriverManager.getConnection(
                config.getTargetUrl(), 
                config.getTargetUsername(), 
                config.getTargetPassword()
            );
        } catch (SQLException e) {
            throw new TransferException("无法连接到目标数据库: " + e.getMessage(), e);
        }
    }
}